package utils;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Properties;

/**
 * Java读写修改Property文件
 * 
 * @author xujinghu
 * @version 1.0
 */
public class PropertiesConfig {

	/**
	 * @author xujinghu
	 * @date 2012-11-28上午9:38:10
	 * @param filePath
	 * @return 读取文件的Properties
	 */
	public static Properties newProperties(String filePath){
		filePath = pathTransform(filePath);
		Properties props = new Properties();
		try {
			InputStream in = new BufferedInputStream(
					new FileInputStream(filePath));
			props.load(in);
			in.close();
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
		return props;
	}
	
	/**
	 * 转换文件路径为绝对路�?	 * @author xujinghu
	 * @date 2012-11-13下午10:37:51
	 * @param 文件相对路径
	 * @return 文件绝对路径
	 */
	private static String pathTransform(String relativePath){
		String absolutePath = "";
		// 获取绝对路径
		absolutePath = PropertiesConfig.class.getResource("/" + relativePath)
				.toString();
		// 截掉路径的�?file:“前缀
		absolutePath = absolutePath.substring(5);
		return absolutePath;
	}
	
	/**
	 * 根据KEY，读取文件对应的�?	 * 
	 * @param filePath
	 *                文件路径，即文件�?��包的路径，例如：java/util/config.properties
	 * @param key
	 *                �?	 * @return key对应的�?
	 */
	public static String readData(String filePath, String key) {
		filePath = pathTransform(filePath);
		Properties props = new Properties();
		try {
			InputStream in = new BufferedInputStream(
					new FileInputStream(filePath));
			props.load(in);
			in.close();
			String value = props.getProperty(key);
			return value;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	/**
	 * 修改或添加键值对 如果key存在，修�? 反之，添加�?
	 * 
	 * @param filePath
	 *                文件路径，即文件�?��包的路径，例如：java/util/config.properties
	 * @param key
	 *                �?	 * @param value
	 *                键对应的�?	 */
	public static void writeData(String filePath, String key, String value) {
		filePath = pathTransform(filePath);
		Properties prop = new Properties();
		try {
			File file = new File(filePath);
			if (!file.exists())
				file.createNewFile();
			InputStream fis = new FileInputStream(file);
			prop.load(fis);
			// �?��要在修改值之前关闭fis
			fis.close();
			OutputStream fos = new FileOutputStream(filePath);
			prop.setProperty(key, value);
			// 保存，并加入注释
			prop.store(fos, "Update '" + key + "' value");
			fos.close();
		} catch (IOException e) {
			System.err.println("Visit " + filePath
					+ " for updating " + value
					+ " value error");
		}
	}

	public static void main(String[] args) {
		System.out.println(PropertiesConfig.readData(
				"conf/config.properties",
				"MIN_SUPPORT"));
	}
}